Новые команды в функциях прямого моделирования C3D Modeler — изменение радиуса скругления и замена грани
В C3D Modeler, в функциях прямого моделирования, появились новые команды. Прямое моделирование — изменение формы импортированных моделей без истории построения.
Первая из них — Изменение радиуса скругления. Функция позволяет выделить грань скругления и задать новое значение радиуса. Если скругление имеет связанные грани, они также перестраиваются.
Рис. 1. Работа команды изменения радиуса скругления
Если в процессе импорта скругления превратились в nurbs-поверхности, команда их распознает как скругления. И после выполнения операции эти поверхности перестанут быть сплайнами и превратятся в элементарные, сохранив свои атрибуты.
Для вызова всех методов прямого редактирования используется функция:
MATH_FUNC (MbResultType) ModifiedSolid (файл action_direct.h)
Для передачи в неё требуется создать класс параметров MbModifiedSolidParams с типом операции MbeModifyingMode::dmm_FilletsRadiusSet или dmm_FilletsRadiusSetSingle.
Параметры создаются по подходящему конструктору:
MbModifiedSolidParams( MbeModifyingMode type,
const MbSNameMaker & names,
const c3d::ItemIndices & faces,
double value )
dmm_FilletsRadiusSet — изменяет всю цепочку гладко состыкованных скруглений одинакового радиуса, как проиллюстрировано на рисунке выше.
dmm_FilletsRadiusSetSingle — изменит только указанные грани, если это возможно. Это может потребоваться, например, для изменения только одного из нескольких скруглений одного радиуса, стыкующихся на угле.
Отличие от существовавшего ранее типа операции dmm_FilletsRadiusChange в том, что dmm_FilletsRadiusChange изменяет радиус на указанное число value, а dmm_FilletsRadiusSet устанавливает новый радиус всем присланным скруглениям. Например, если на вход поданы 2 грани скругления с радиусами 10 и 20, то при value=5 в режиме dmm_FilletsRadiusChange эти скругления после операции будут иметь радиусы 15 и 25, а при dmm_FilletsRadiusSet 5 и 5 соответственно.
Данная функциональность не предназначена для использования на скруглениях переменного радиуса, скруглениях эллипсом и т. п. Конфигурация скруглений на углах по возможности сохраняется, но в сложных случаях это не гарантируется.
В результатах операции создаются несколько вспомогательных объектов, характеризующие предполагаемое расположение новой грани, даже при невозможности выполнения операции. Это точка в центре новой грани скругления, ось, перпендикулярная окружности скругления, угол раскрывания скругления. Их можно получить при помощи метода MbModifiedSolidResults::GetFilletRadiusSetHotPoint.
Другая новинка в прямом моделировании — это функция замены граней. Достаточно выбрать редактируемую грань и указать опорную. В этом случае тело перестроится, изменив форму грани. Скругления, гладко примыкающие к заменяемым граням, адаптируются.
Рис. 2. Замена грани
Для вызова требуется класс параметров MbModifiedSolidParams с типом операции MbeModifyingMode::dmm_ReplaceFaces.
Параметры создаются по подходящему конструктору:
template<class SurfArray>
MATH_FUNC_EX MbModifiedSolidParams( MbeModifyingMode type,
const MbSNameMaker & names,
const c3d::ItemIndices & replacedFaces,
const SurfArray & replacementSurfaces,
bool sameSurfaces,
const c3d::NumbersVector & surfaceParts,
const c3d::DoubleVector & offsets )
Редактируемую грань можно сразу заменять на поверхности с эквидистантным смещением (массив значений offsets). Если существует несколько вариантов замены: различные петли или периодические поверхности, то выбор осуществляется при помощи номера, заданного в surfaceParts. Для элементарных поверхностей замена возможна на продолжении указанной поверхности, для всех прочих требуется существование поверхности в области продления тела, иначе результат не гарантируется.
Рис. З. Замена нескольких граней на поверхность
Можно заменить сразу несколько граней на одну.
В результатах операции выдаются вспомогательные объекты, характеризующие предполагаемое расположение новой грани, даже при невозможности выполнения операции: точка в центре новой грани скругления и вектор, по которому эта точка смещается при изменении параметра сдвига. Их можно получить при помощи метода MbModifiedSolidResults::GetReplaceFacesHotPoint.
Описанная функциональность готовится к выпуску и уже доступна для тестирования в модуле C3D Modeler. Запросить пробную версию вы можете через форму обратной связи на нашем сайте.